package pruebas;

import auxiliares.mostrarEstructuras;
import implementacion.Cliente;
import implementacion.FacturacionD;
import implementacion.conjuntoFacturaD;
import tda.ArbolClientesTDA;
import tda.ConjuntoIntTDA;
import tda.ConjuntoItemsFacturaTDA;
import tda.FacturacionTDA;
import tda.ItemFactura;
import implementacion.Algoritmos;

public class test {

	public static void main(String[] args) {
		//PruebaAgregarItem();
		//PruebaListarFacturasClientes();
		//PruebaObtenerFacturas();
		//PruebaEliminarFacturas();
	
		//PROBANDO EL BUSCAR CLIENTE
		/*
		ArbolClientesTDA cliente = new Cliente();
		cliente.inicializar();
		cliente.agregarCliente(10, "Juan");
		cliente.agregarCliente(5, "Pedro");
		cliente.agregarCliente(28, "Maria");
		cliente.agregarCliente(4, "Ana");
		System.out.println(cliente.buscarCliente(28).getNombre());	
		*/

		//PruebaObtenerClienteConMasFacturas();
		//PruebaAgregarItem();
		//PruebaMontoFactura();
		 PruebaMontoTotalFacturas();
		
	}
	
	public static void PruebaConjuntos()
	{
	// TODO Auto-generated method stub
		ConjuntoItemsFacturaTDA conjunto = new conjuntoFacturaD();
		ItemFactura itemM = new ItemFactura();
		
		itemM.cantidad = 4;
		itemM.codigo= 1;
		itemM.descripcion ="item 1";
		itemM.precioUnitario = 4.0f;
		conjunto.inicializarConjunto();
		
		conjunto.agregar(itemM);
		mostrarEstructuras.conjuntoItem(conjunto);
	}
	
	public static void PruebaClientes()
	{
		ArbolClientesTDA cliente = new Cliente();
		cliente.inicializar();
		cliente.agregarCliente(10, "Prueba1");
		cliente.agregarCliente(5, "Prueba1");
		cliente.agregarCliente(28, "Prueba1");
		cliente.agregarCliente(4, "Prueba1");
		
		System.out.println("Arbol inicio");
		mostrarEstructuras.Cliente(cliente);
		
		cliente.eliminarCliente(0);
		System.out.println("Arbol con elemento borrado");
		mostrarEstructuras.Cliente(cliente);
	}
	
	public static void PruebaAgregarItem()
	{
		Algoritmos algoritmo = new Algoritmos();
		algoritmo.inicializar();
		algoritmo.agregarCliente(10, "Cliente10");
		algoritmo.agregarCliente(5, "Cliente5");
		algoritmo.agregarCliente(28, "Cliente28");
		algoritmo.agregarCliente(4, "Cliente4");
		
		ItemFactura item = new ItemFactura();
		item.codigo = 1;
		item.descripcion = "DescripcionPrueba1";
		item.cantidad = 100;
		
		
		algoritmo.agregarItemFactura(5, 1, item);
		
		//creo y agrego otro item
		ItemFactura item2 = new ItemFactura();
		item2.codigo = 2;
		item2.descripcion = "DescripcionPrueba2";
		item2.cantidad = 200;
		
		algoritmo.agregarItemFactura(28, 1, item2);
		
		//agrego otro item pero a otra factura
		ItemFactura item3 = new ItemFactura();
		item3.codigo = 3;
		item3.descripcion = "DescripcionPrueba3";
		item3.cantidad = 300;
		algoritmo.agregarItemFactura(10, 2, item3);
		algoritmo.listarFacturasClientes();
		
		
	}
	
	public static void PruebaMontoFactura()
	{
		Algoritmos algoritmos = new Algoritmos();
		algoritmos.inicializar();
		
		algoritmos.agregarCliente(123, "Juan");
		
		ItemFactura item1 = new ItemFactura();
		item1.cantidad = 1;
		item1.codigo = 1;
		item1.descripcion = "coca";
		item1.precioUnitario = (float) 18.00;
		
		ItemFactura item2 = new ItemFactura();
		item2.cantidad = 2;
		item2.codigo = 2;
		item2.descripcion = "agua";
		item2.precioUnitario = 10;
			
		ItemFactura item3 = new ItemFactura();
		item3.cantidad = 2;
		item3.codigo = 3;
		item3.descripcion = "jugo";
		item3.precioUnitario = (float) 3.5;
			
	
		algoritmos.agregarItemFactura(123, 1, item1);
		algoritmos.agregarItemFactura(123, 1, item2);
		algoritmos.agregarItemFactura(123, 2, item3);
		
		System.out.println("Monto Factura 1: " + algoritmos.importeFactura(123, 1));
		
		System.out.println("Monto Factura 2: " + algoritmos.importeFactura(123, 2));

	}
	
	public static void PruebaMontoTotalFacturas()
	{
		Algoritmos algoritmos = new Algoritmos();
		algoritmos.inicializar();
		
		algoritmos.agregarCliente(123, "Juan");
		
		ItemFactura item1 = new ItemFactura();
		item1.cantidad = 1;
		item1.codigo = 1;
		item1.descripcion = "coca";
		item1.precioUnitario = (float) 18.00;
		
		ItemFactura item2 = new ItemFactura();
		item2.cantidad = 2;
		item2.codigo = 2;
		item2.descripcion = "agua";
		item2.precioUnitario = 10;
			
		ItemFactura item3 = new ItemFactura();
		item3.cantidad = 2;
		item3.codigo = 3;
		item3.descripcion = "jugo";
		item3.precioUnitario = (float) 3.5;
	
		algoritmos.agregarItemFactura(123, 1, item1);
		algoritmos.agregarItemFactura(123, 1, item2);
		algoritmos.agregarItemFactura(123, 2, item3);
		
		System.out.println("Monto total: " + algoritmos.montoTotalFacturas(123));
	}
	
	//Listar a todos los clientes con sus correspondientes facturas y los articulos que contienen cada una de ellas
	public static void PruebaListarFacturasClientes()
	{
		Algoritmos algoritmos = new Algoritmos();
		algoritmos.inicializar();
		algoritmos.agregarCliente(1, "Ezequiel");
		algoritmos.agregarCliente(2, "Ignacio");
		algoritmos.agregarCliente(3, "Cristian");
		algoritmos.agregarCliente(4, "Eugenia");
		algoritmos.agregarCliente(5, "Patricia");
		
		ItemFactura item1 = new ItemFactura();
		item1.codigo = 1;
		item1.cantidad = 1;
		item1.descripcion = "item1";
		item1.precioUnitario = (float) 18.00;
		
		ItemFactura item2 = new ItemFactura();
		item2.codigo = 2;
		item2.cantidad = 2;
		item2.descripcion = "item2";
		item2.precioUnitario = 10;
		
		ItemFactura item3 = new ItemFactura();
		item3.codigo = 3;
		item3.cantidad = 2;
		item3.descripcion = "item3";
		item3.precioUnitario = (float) 3.5;
		
		ItemFactura item4 = new ItemFactura();
		item4.codigo = 4;
		item4.cantidad = 5;
		item4.descripcion = "item4";
		item4.precioUnitario = (float) 2.5;
		
		algoritmos.agregarItemFactura(1, 1, item1);
		algoritmos.agregarItemFactura(1, 1, item4);
		algoritmos.agregarItemFactura(2, 2, item2);
		algoritmos.agregarItemFactura(2, 3, item3);
		
		algoritmos.listarFacturasClientes();
		  
	}
	
	public static void PruebaObtenerFacturas()
	{
		Algoritmos algoritmos = new Algoritmos();
		algoritmos.inicializar();
		algoritmos.agregarCliente(1, "Ezequiel");
		algoritmos.agregarCliente(2, "Ignacio");
		
		ItemFactura item1 = new ItemFactura();
		item1.codigo = 1;
		item1.cantidad = 1;
		item1.descripcion = "item1";
		item1.precioUnitario = (float) 18.00;
		
		ItemFactura item2 = new ItemFactura();
		item2.codigo = 2;
		item2.cantidad = 2;
		item2.descripcion = "item2";
		item2.precioUnitario = 10;
		
		ItemFactura item3 = new ItemFactura();
		item3.codigo = 3;
		item3.cantidad = 2;
		item3.descripcion = "item3";
		item3.precioUnitario = (float) 3.5;
		
		ItemFactura item4 = new ItemFactura();
		item4.codigo = 4;
		item4.cantidad = 5;
		item4.descripcion = "item4";
		item4.precioUnitario = (float) 2.5;
		
		algoritmos.agregarItemFactura(1, 1, item1);
		algoritmos.agregarItemFactura(1, 1, item4);
		algoritmos.agregarItemFactura(2, 2, item2);
		algoritmos.agregarItemFactura(2, 3, item3);
		
		ConjuntoIntTDA conjunto = algoritmos.obtenerFacturas(2);
		System.out.println("Factura del cliente nro:" + 2);
        while(!conjunto.conjuntoVacio())
        {
        	int nroFactura = conjunto.elegir();
        	System.out.println(" Factura nro:"+nroFactura);
        	conjunto.sacar(nroFactura);
        } 
	}
	
	public static void PruebaEliminarFacturas()
	{
		Algoritmos algoritmos = new Algoritmos();
		algoritmos.inicializar();
		algoritmos.agregarCliente(1, "Ezequiel");
		algoritmos.agregarCliente(2, "Ignacio");
		
		ItemFactura item1 = new ItemFactura();
		item1.codigo = 1;
		item1.cantidad = 1;
		item1.descripcion = "item1";
		item1.precioUnitario = (float) 18.00;
		
		ItemFactura item2 = new ItemFactura();
		item2.codigo = 2;
		item2.cantidad = 2;
		item2.descripcion = "item2";
		item2.precioUnitario = 10;
		
		ItemFactura item3 = new ItemFactura();
		item3.codigo = 3;
		item3.cantidad = 2;
		item3.descripcion = "item3";
		item3.precioUnitario = (float) 3.5;
		
		ItemFactura item4 = new ItemFactura();
		item4.codigo = 4;
		item4.cantidad = 5;
		item4.descripcion = "item4";
		item4.precioUnitario = (float) 2.5;
		
		algoritmos.agregarItemFactura(1, 1, item1);
		algoritmos.agregarItemFactura(1, 1, item4);
		algoritmos.agregarItemFactura(2, 2, item2);
		algoritmos.agregarItemFactura(2, 3, item3);
        
		ConjuntoIntTDA conjunto = algoritmos.obtenerFacturas(2);
		System.out.println("Factura del cliente nro:" + 2);
        while(!conjunto.conjuntoVacio())
        {
        	int nroFactura = conjunto.elegir();
        	System.out.println(" Factura nro:"+nroFactura);
        	conjunto.sacar(nroFactura);
        }
		
        algoritmos.eliminarFactura(2, 2);
        
        conjunto = algoritmos.obtenerFacturas(2);
		System.out.println("Factura del cliente nroo:" + 2);
        while(!conjunto.conjuntoVacio())
        {
        	int nroFactura = conjunto.elegir();
        	System.out.println(" Factura nro:"+nroFactura);
        	conjunto.sacar(nroFactura);
        } 
        
	}
	
	public static void PruebaObtenerClienteConMasFacturas()
	{
		Algoritmos algoritmos = new Algoritmos();
		algoritmos.inicializar();
		algoritmos.agregarCliente(1, "Ezequiel");
		algoritmos.agregarCliente(2, "Ignacio");
		
		ItemFactura item1 = new ItemFactura();
		item1.codigo = 1;
		item1.cantidad = 1;
		item1.descripcion = "item1";
		item1.precioUnitario = (float) 18.00;
		
		ItemFactura item2 = new ItemFactura();
		item2.codigo = 2;
		item2.cantidad = 2;
		item2.descripcion = "item2";
		item2.precioUnitario = 10;
		
		ItemFactura item3 = new ItemFactura();
		item3.codigo = 3;
		item3.cantidad = 2;
		item3.descripcion = "item3";
		item3.precioUnitario = (float) 3.5;
		
		ItemFactura item4 = new ItemFactura();
		item4.codigo = 4;
		item4.cantidad = 5;
		item4.descripcion = "item4";
		item4.precioUnitario = (float) 2.5;
		
		ItemFactura item5 = new ItemFactura();
		item4.codigo = 5;
		item4.cantidad = 5;
		item4.descripcion = "item4";
		item4.precioUnitario = (float) 2.5;
		
		algoritmos.agregarItemFactura(1, 1, item1);
		algoritmos.agregarItemFactura(1, 1, item4);
		algoritmos.agregarItemFactura(2, 2, item2);
		algoritmos.agregarItemFactura(2, 3, item3);
		algoritmos.agregarItemFactura(2, 5, item5);
        
		System.out.println("El Cliente que tiene mas facturas es:" + algoritmos.obtenerClienteConMasFacturas());
        
	}

}
